home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / tcclib.exe / SAYA.C < prev    next >
Encoding:
Text File  |  1990-01-31  |  1.2 KB  |  50 lines

  1. unsigned char far *CurrentPos( void );
  2. unsigned char far *ScrPtr( int x, int y );
  3. void RestoreCurPos( unsigned char far *s );
  4. void ScrollUp( int x, int y, int xx, int yy, int n );
  5. void Beep( void );
  6.  
  7. #define VIDMODE   *(unsigned char far *) 0x00449lu
  8. #define MONOSEG  0xb0000000L
  9. #define COLOR 0xb8000000L
  10. #define VIDSEG (unsigned char far *)((7 == VIDMODE) ? MONOSEG : COLOR )
  11.  
  12. #define BELL 7
  13. #define TAB  9
  14.  
  15. void SayA( unsigned char attrib, register char *cp )
  16. {
  17.     unsigned char far *scptr = CurrentPos();
  18.     unsigned char far *scend = ScrPtr( 80, 25 );
  19.  
  20.     while (*cp) {
  21.         switch( *cp ) {
  22.             case '\n':
  23.                 scptr = (unsigned char far *) ((long) scptr + (long) 160 );
  24.             case '\r':
  25.                 scptr = (unsigned char far *)
  26.                     ( ( ( (long) scptr - (long) VIDSEG ) /
  27.                           (long) 160 ) * (long) 160 + (long) VIDSEG );
  28.                 cp++;
  29.                 break;
  30.             case BELL:
  31.                 Beep();
  32.                 cp++;
  33.                 break;
  34.             case TAB:
  35.                 scptr = (unsigned char far *) ( (long) scptr / 16 * 16 );
  36.                 cp++;
  37.                 break;
  38.             default:
  39.                 *scptr++ = *cp++;
  40.                 *scptr++ = attrib;
  41.                 break;
  42.         }
  43.         if ( scptr > scend ) {
  44.             ScrollUp( 1, 1, 80, 25, 1 );
  45.             scptr -= 160;
  46.         }
  47.     }
  48.     RestoreCurPos( scptr );
  49. }
  50.